/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.service;

import com.model.domain.persona.CursoEstudiado;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import util.StringUtil;

/**
 *
 * @author Rdelacruz
 */
public class CursoEstudiadoService 
extends AbstractService
{   
     
    public List<CursoEstudiado> findByDni(Connection con, String dni) throws SQLException {                
        List<CursoEstudiado> lista = new ArrayList<CursoEstudiado>();
        Statement st = null;
        try {     
            st = con.createStatement();
            ResultSet rs = st.executeQuery("select * from Curso_Estudiado where dni='"+dni+"'");                       
            while(rs.next()) {                
                CursoEstudiado c = new CursoEstudiado();
                c.setNumero(rs.getInt("numero"));
                c.setNombre(rs.getString("curso"));
                c.setAnho(rs.getString("año"));
                c.setDuracionMeses(rs.getInt("meses"));
                lista.add(c);
            }
        }
        finally {
            if(st!=null) st.close();
        }
        return lista;
    }
    
    public void guardar(Connection con, List<CursoEstudiado> lista) throws SQLException {                
        PreparedStatement ps = null;
        try {            
            ps = con.prepareStatement("insert into Curso_Estudiado(dni,numero,curso,año,meses) "
                    + "values(?,?,?,?,?)");
                       
            //int numero = 1;
            for(CursoEstudiado c :lista) {                
                if(!validar(c))
                    continue;                                   
                
                ps.setString(1, c.getPersonal().getDni());
                //ps.setInt(2, numero++);
                ps.setInt(2, c.getNumero());
                ps.setString(3, c.getNombre());
                ps.setString(4, c.getAnho());
                ps.setInt(5, c.getDuracionMeses());
                
                ps.executeUpdate();
            }
        }
        finally {
            if(ps!=null) ps.close();
        }
    }
    
    private boolean validar(CursoEstudiado c) {
        return !StringUtil.esVacioONulo(c.getNombre()) 
                && !StringUtil.esVacioONulo(c.getAnho())
                && c.getDuracionMeses()!=null;
    }
    
    private List<CursoEstudiado>  getCursosNoGuardados(Connection con, List<CursoEstudiado> lista) throws SQLException {
        List<CursoEstudiado> listaNoGuardados = new ArrayList<CursoEstudiado>();
        PreparedStatement ps = null;                      
        try {            
            ps = con.prepareStatement("select * from Curso_Estudiado "
                    + "where dni=? and numero=?");
                       
            for(CursoEstudiado c :lista) {                
                ps.setString(1, c.getPersonal().getDni());
                ps.setInt(2, c.getNumero());
                
                ResultSet rs = ps.executeQuery();
                if(!rs.next()) {
                    listaNoGuardados.add(c);
                }
            }
        }
        finally {
            if(ps!=null) ps.close();
        }
        
        return listaNoGuardados;
    }
            
    public void actualizar_guardar(Connection con, List<CursoEstudiado> lista) throws SQLException { 
        actualizar(con,lista);
        guardar(con, getCursosNoGuardados(con, lista));
    }
    
    public void actualizar(Connection con, List<CursoEstudiado> lista) throws SQLException {                
        PreparedStatement ps = null;
                      
        try {            
            ps = con.prepareStatement("update Curso_Estudiado "
                    + "set curso=?,año=?,meses=? where dni=? and numero=?");
                       
            for(CursoEstudiado c :lista) {                
                if(!validar(c))
                    continue;                                    
                                
                ps.setString(1, c.getNombre());
                ps.setString(2, c.getAnho());
                ps.setInt(3, c.getDuracionMeses());
                
                ps.setString(4, c.getPersonal().getDni());
                ps.setInt(5, c.getNumero());
                
                ps.executeUpdate();
            }
        }
        finally {
            if(ps!=null) ps.close();
        }
    }
    
}
